package cn.iocoder.yudao.framework.business.address.service;

import cn.iocoder.yudao.framework.region.RegionUtils;
import cn.iocoder.yudao.framework.region.enums.RegionDataSet;
import cn.iocoder.yudao.framework.region.vo.getter.AddressSaveGetter;
import cn.iocoder.yudao.framework.region.vo.setter.AddressSaveSetter;

/**
 * 地址信息 ServiceImpl 接口类
 *
 * @author 山野羡民（1032694760@qq.com）
 */
@SuppressWarnings("UnusedReturnValue")
public interface AddressService<DO extends AddressSaveSetter> {

    default void autoAssignAddress(DO aDo, AddressSaveGetter reqVO) {
        aDo.setCountyCode(reqVO.getCountyCode());
        String cityCode = RegionUtils.getRegionParentCode(RegionDataSet.ONLY_LATEST, reqVO.getCountyCode());
        aDo.setCityCode(cityCode);
        String provinceCode = RegionUtils.getRegionParentCode(RegionDataSet.ONLY_LATEST, cityCode);
        aDo.setProvinceCode(provinceCode);
        aDo.setDetailAddress(reqVO.getDetailAddress());
        aDo.setLatitude(reqVO.getLatitude());
        aDo.setLongitude(reqVO.getLongitude());
    }

    /**
     * 管理员更新地址
     *
     * @param reqVO 更新信息
     */
    DO updateAddress(AddressSaveGetter reqVO);

    /**
     * 用户更新地址
     *
     * @param userId   用户编号
     * @param userType 用户类型
     * @param reqVO    更新信息
     */
    DO updateAddress(Long userId, Integer userType, AddressSaveGetter reqVO);

}
